/* 阻塞队列
阻塞队列作为日志缓冲区，内部封装了生产者-消费者模型
生产者：向队列尾部插入日志信息的线程
消费者：从队列头部取出日志信息并处理的线程

因为涉及到多线程读写，使用互斥锁实现对队列的互斥访问
同时用两个条件信号实现生产者-消费者模型

需要注意的点是插入和删除时，条件变量需要配合互斥锁
先上锁，然后在while循环内检查条件变量
当插入一个日志时，唤醒一个消费者线程
当处理一个日志时，唤醒一个生产者线程
*/

#ifndef BLOCKQUEUE_H
#define BLOCKQUEUE_H

#include <mutex>
#include <queue>
#include <condition_variable>
#include <sys/time.h>

template<class T>
class BlockQueue{
public:
        explicit BlockQueue(size_t MaxCapacity = 1000);    //在C++中,explicit关键字是用来修饰类的构造函数的,被修饰的构造函数的类,不能发生相应的隐式类型的转换,只能以显示的方式进行类型转换。
        ~BlockQueue();
        void clear();
        bool empty();
        bool full();
        void close();

};


#endif